// app.js
const { showToast, saveAppValue, getAppValue } = require("./utils/util")
const api = require("/request/api")
const request = require("/request/request")
const util = require("/utils/util")
import * as computedBehavior from 'miniprogram-computed'
App({
    data: {
        paddingTop: 0,
    },
    async onLaunch(options) {
        // query: {sid: "666a25a1", id: "43"}
        console.log("appjs", options);
        let Query = options.query
        let sid = Query.sid ? Query.sid : ''

        console.log("5555sid", sid);
        // wx.computedBehavior = computedBehavior
        // console.log('computedBehavior', computedBehavior);
        // console.log('首页options:', options);
        // wx.clearStorageSync()
        // const ooo = wx.getStorageInfoSync()['keys']
        // console.log(ooo);
        // ooo.forEach(item => {
        //     console.log(wx.getStorageSync(item));
        // });
        // console.log(wx.requestSubscribeMessage);

        const that = this
        const updateManager = wx.getUpdateManager()
        // console.log(updateManager);

        // 朋友圈进入很多api会无法使用 比如wx.getUpdateManager、wx.login
        if (updateManager) {
            // 请求完新版本信息的回调
            updateManager.onCheckForUpdate(function (res) {
            })

            updateManager.onUpdateReady(function () {
                wx.showModal({
                    title: '更新提示',
                    content: '新版本已经准备好，是否重启应用？',
                    success: function (res) {
                        if (res.confirm) {
                            // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                            updateManager.applyUpdate()
                        }
                    }
                })
            })

            updateManager.onUpdateFailed(function () {
                // 新版本下载失败
            })
        }


        wx.getSystemInfo({
            success(res) {
                // console.log('机型信息', res);
                // 获取设备的状态栏高度，响应式设置导航栏高度
                that.globalData.paddingTop = res.statusBarHeight + 46
                // console.log(that.globalData);
            }
        })

        that.globalData.isAgree = wx.getStorageSync('isAgree')


        let userInfo = wx.getStorageSync('userInfo')
        // let userInfo = {}
        if (userInfo.uid) {
            // console.log("userInfo.uid", userInfo.uid);
            that.globalData.uid = userInfo.uid
            that.globalData.islogin = true
            that.globalData.userInfo = userInfo
            that.globalData.openId = userInfo.openId
            // console.log('userInfo.openId', userInfo.openId);
            await that.getMyFullInfo()

            let cartRes = await request.post(api.cart_list, { uid: userInfo.uid })
            // console.log('cartRes', cartRes);
            that.globalData.cartnum = cartRes.total_goods_nums
            // 财务信息查询
            // await that.getUserFinance()
        }
        // 静默登录，配合三商app进入用户直接登录注册
        // login无需添加sid绑定分销关系，只有二维码等分享需要传入sid绑定关系
        else {
            // 此处sid 主要针对未登录过小程序的新用户通过分享进入，绑定分享分销上下级关系
            // 如果已经登录过，但是没有绑定分销关系（recommend_id=0）。会在商品详情页、文章详情页，利用wxacodescan接口实现关系绑定
            // gologin方法参数sid有默认为空字符串 sid=''
            await that.gologin(sid)
            await that.getMyFullInfo()
            let cartRes = await request.post(api.cart_list, { uid: userInfo.uid })
            // console.log('cartRes', cartRes);
            that.globalData.cartnum = cartRes.total_goods_nums
        }

        // 提醒专员授权审核分销
        // this.checkDistribute()


        // 普通的通知授权
        // this.checkSub()

        this.getcontrolStatus()
    },

    // 获取功能开启与否状态
    async getcontrolStatus() {
        let status = await request.post(api.controlswitch, {})
        console.log("getcontrolStatus", status);
        // 默认关闭
        this.globalData.controlStatus = status

    },

    // 提醒专员授权审核通知
    checkDistribute() {
        const that = this
        that.globalData.checkflag1 = util.getAppValue('checkflag1')
        // 模板ID
        let tmpl_Ids = [
            'yumQ5iVzxelMnOEiu9wRbxTTy0G8tlTBGIu1S8agNfA', // 待审核通知模板
            // 'DexqZyfXPD_zQ9OjnZec9jBQU9sWFpFholrbWaBPM3s'
        ]
        // 审核专员openid数组 找韦总要数据库对应的openid
        let openIdArr = ['oCUbM5D_LyzLdnCF0FYaajZ0ZqFs', 'oCUbM5OOsQ0-v3HTpgX9jWEXDZqE']

        // 获取当前用户的openid，如果为空直接跳出方法
        let userOpenID = this.globalData.openId
        if (userOpenID == '') return
        if (openIdArr.includes(userOpenID)) {
            wx.getSetting({
                //  这里设置为true,下面才会返回mainSwitch
                withSubscriptions: true,
                success: function (res) {
                    console.log('checkDistribute', res);

                    // 调起授权界面弹窗
                    if (res.subscriptionsSetting.mainSwitch) {  // 用户打开了订阅消息总开关
                        if (res.subscriptionsSetting.itemSettings != null) {
                            let moIdState = res.subscriptionsSetting.itemSettings[tmpl_Ids[0]];  // 用户同意的消息模板id
                            console.log(moIdState, that.globalData.checkflag1, tmpl_Ids[0]);

                            if ((moIdState === 'accept' || moIdState === undefined) && !that.globalData.checkflag1) {
                                console.log('接受了消息推送');
                                that.againShow(tmpl_Ids[0], '温馨提示', '是否授权分销审核提醒服务', 'checkflag1')
                            } else if (moIdState === 'reject') {
                                // 防止专员第一次错选，授权框不再提示。
                                // 再次调用 wx.requestSubscribeMessage也无法成功授权，会保留上次的拒绝选择 如何解决？
                                console.log("拒绝消息推送");

                            } else if (moIdState === 'ban') {
                                console.log("已被后台封禁");

                            }
                        } else {
                            // 当用户没有点击 ’总是保持以上选择，不再询问‘  按钮。那每次执到这都会拉起授权弹窗
                            wx.showModal({
                                title: '温馨提示',
                                content: '是否授权开通分销审核提醒',
                                showCancel: true,
                                success: function (ress) {
                                    if (ress.confirm) {
                                        wx.requestSubscribeMessage({   // 调起消息订阅界面
                                            tmplIds: tmpl_Ids,
                                            success(res) {
                                                if (res[tmpl_Ids[0]] === 'accept') {
                                                    util.showToast('订阅审核消息成功')
                                                    that.globalData['checkflag1'] = true
                                                    util.saveAppValue('checkflag1', true)
                                                }
                                                if (res[tmpl_Ids[0]] === 'reject') {
                                                    util.showToast('订阅审核消息失败')
                                                }
                                            },
                                            fail(er) {
                                                util.showToast('订阅审核消息失败')
                                                console.log(er);
                                            }
                                        })

                                    }
                                }
                            })
                        }

                    } else {
                        console.log('订阅消息未开启')
                    }
                },
                fail: function (error) {
                    console.log(error);
                },
            })
        }



    },

    // 一次性订阅方法 模板id是必传参数
    checkSub(tmpID = 'yumQ5iVzxelMnOEiu9wRbxTTy0G8tlTBGIu1S8agNfA') {
        // 未登录直接跳出
        if (this.globalData.openId == '') return
        // 模板ID 注意：一次最多三个模板授权
        let tmpl_Ids = [
            // 'yumQ5iVzxelMnOEiu9wRbxTTy0G8tlTBGIu1S8agNfA', // 待审核通知模板
            tmpID  // 订单状态变更提醒模板
        ]

        wx.getSetting({
            //  这里设置为true,下面才会返回mainSwitch,这个参数为用户是否打开订阅消息总开关
            withSubscriptions: true,
            success: function (res) {
                console.log('getSetting', res);

                // 调起授权界面弹窗
                if (res.subscriptionsSetting.mainSwitch) {  // 用户打开了订阅消息总开关
                    // 第一次调起授权框，用户拒绝或者同意后，itemSettings都不会为空
                    // 直接判断对应的模板之前选择状态，以此判断是否调用再次授权
                    if (res.subscriptionsSetting.itemSettings[tmpl_Ids[0]]) {
                        let moIdState = res.subscriptionsSetting.itemSettings[tmpl_Ids[0]];  // 用户同意的消息模板id
                        console.log(moIdState);
                        if (moIdState == 'accept') {
                            wx.requestSubscribeMessage({   // 调起消息订阅界面
                                tmplIds: tmpl_Ids,
                                success(res) {
                                    if (res[tmpl_Ids[0]] === 'accept') {
                                        console.log('订阅成功')
                                    }
                                    if (res[tmpl_Ids[0]] === 'reject') {
                                        console.log('订阅失败')
                                    }
                                },
                                fail(err) {
                                    console.log("订阅消息 失败 ");
                                    console.log(err);
                                }
                            })
                        }
                    } else {
                        // 当用户没有点击 ’总是保持以上选择，不再询问‘  按钮。那每次执到这都会拉起授权弹窗
                        wx.showModal({
                            title: '温馨提示',
                            content: '是否授权小程序消息服务通知',
                            showCancel: true,
                            success: function (ress) {
                                if (ress.confirm) {
                                    wx.requestSubscribeMessage({   // 调起消息订阅界面
                                        tmplIds: tmpl_Ids,
                                        success(res) {
                                            if (res[tmpl_Ids[0]] === 'accept') {
                                                console.log('订阅成功')
                                            }
                                            if (res[tmpl_Ids[0]] === 'reject') {
                                                console.log('订阅失败')
                                            }
                                        },
                                        fail(er) {
                                            console.log("订阅消息 失败 ");
                                            console.log(er);
                                        }
                                    })

                                }
                            }
                        })
                    }

                } else {
                    console.log('订阅消息未开启')
                }
            },
            fail: function (error) {
                console.log(error);
            },
        })

    },

    // 再次调用授权
    againShow(tmpl_Id, title = '授权提醒', content = '是否授权相关消息提醒服务', flag) {
        const that = this
        // 当用户没有点击 ’总是保持以上选择，不再询问‘  按钮。那每次执到这都会拉起授权弹窗
        wx.showModal({
            title: title,
            content: content,
            showCancel: true,
            success: function (ress) {
                if (ress.confirm) {
                    wx.requestSubscribeMessage({   // 调起消息订阅界面
                        tmplIds: [tmpl_Id],
                        success(res) {
                            if (res[tmpl_Id] === 'accept') {
                                util.showToast('授权成功')
                                that.globalData[flag] = true
                                util.saveAppValue(flag, true)
                            }
                            if (res[tmpl_Id] === 'reject') {
                                util.showToast('授权失败')
                            }
                        },
                        fail(er) {
                            console.log("订阅消息 失败 ");
                            console.log(er);
                        }
                    })

                }
            }
        })
    },
    // 提供给其他页面调用，用户授权登录
    confirmLogin(contentText = '该操作需登录进行') {
        const that = this
        return new Promise((resolve, reject) => {
            wx.showModal({
                title: '提示',
                content: contentText,
                showCancel: true,
                confirmText: '授权登录',
                success: async (res) => {
                    if (res.confirm) {
                        let flag = await that.gologin()
                        if (flag) {
                            resolve(true)
                            // resolve('登录成功')

                        } else {
                            resolve(false)
                            // resolve('登录失败')

                        }
                    } else if (res.cancel) {
                        util.showToast('已取消')
                        resolve(false)
                        // resolve('已取消')

                    }
                },
                fail: () => {
                    util.showToast('登录授权失败')
                    resolve(false)
                }
            })
        })
    },

    // 提供给其他页面调用，用户授权获取手机号
    confirmSetPhone(contentText = '该操作需获取你的手机号') {
        const that = this
        return new Promise((resolve, reject) => {
            wx.showModal({
                title: '提示',
                content: contentText,
                showCancel: true,
                confirmText: '授权获取',
                success: async (res) => {
                    if (res.confirm) {
                        let flag = await that.setPhone()
                        if (flag) {
                            resolve(true)
                        } else {
                            resolve(false)
                        }
                    } else if (res.cancel) {
                        util.showToast('已取消')
                        resolve(false)
                    }
                },
                fail: () => {
                    util.showToast('手机号授权失败')
                }
            })
        })
    },

    // 授权手机号
    async setPhone(phoneCode) {
        const that = this

        // 判断是否登录
        if (!that.globalData.uid) {
            let loginflag = await that.confirmLogin()
            if (!loginflag) {
                // return Promise.resolve(false)
                return Promise.resolve('登录失败')

            }
        }

        return new Promise((resolve, reject) => {
            // 授权手机号
            let params = {
                code: phoneCode,
                uid: that.globalData.uid
            }
            util.showLoading('正在获取')
            request.post(api.set_phone, params).then(async res => {
                // res: true、false、null 三种结果
                util.hideLoading()
                if (res) {
                    // resolve(true)
                    resolve('授权手机成功')

                } else {
                    // resolve(false)
                    resolve('授权手机失败')

                }
            })
        })
    },

    // 静默登录
    gologin(sid = '') {
        const that = this
        return new Promise((reslove, reject) => {
            // 静默登录
            wx.login({
                success: res => {
                    // console.log(res);
                    let params = {
                        code: res.code,
                        sid: sid
                    }
                    util.showLoading('正在登录')
                    request.post(api.login, params).then(async res => {
                        // console.log('gologin', res);
                        // 存入本地缓存
                        await wx.setStorageSync('uid', res.uid)
                        await wx.setStorageSync('islogin', true)
                        await wx.setStorageSync('userInfo', res)
                        await wx.setStorageSync('openId', res.openId)

                        // 存入全局变量
                        that.globalData.uid = res.uid
                        that.globalData.islogin = true
                        that.globalData.userInfo = res
                        that.globalData.openId = res.openId

                        // 获取并设置登录用户购物车商品数量
                        let cartRes = await request.post(api.cart_list, { uid: res.uid })
                        that.globalData.cartnum = cartRes.total_goods_nums

                        util.hideLoading()

                        // that.checkSub()
                        // 登录后更新完整用户信息
                        that.getMyFullInfo().then(() => {
                            // that.getUserFinance()
                        }).then(() => {


                            reslove(true)
                        })
                    })
                },
                fail: res => {
                    that.globalData.isFriendIn = true
                    wx.setStorageSync('isFriendIn', true)

                    console.log('朋友圈失败');
                    reslove(false)
                }
            })
        })
    },

    // 登录获取简单用户昵称头像信息
    simpleLogin() {
        const that = this
        return new Promise((reslove, reject) => {
            // 静默登录
            wx.login({
                success: res => {
                    let params = {
                        code: res.code,
                    }
                    request.post(api.login, params).then(async res => {
                        // console.log('gologin', res);
                        // 存入本地缓存
                        await wx.setStorageSync('uid', res.uid)
                        await wx.setStorageSync('islogin', true)
                        await wx.setStorageSync('userInfo', res)
                        await wx.setStorageSync('openId', res.openId)

                        // 存入全局变量
                        that.globalData.uid = res.uid
                        that.globalData.islogin = true
                        that.globalData.userInfo = res
                        that.globalData.openId = res.openId

                        // 登录后更新完整用户信息
                        that.getMyFullInfo().then(() => {
                        }).then(() => {
                            reslove(true)
                        })
                    })
                },
                fail: res => {
                    that.globalData.isFriendIn = true
                    wx.setStorageSync('isFriendIn', true)
                    console.log('朋友圈失败');
                    reslove(false)
                }
            })
        })
    },

    // 获取完整个人信息，包括会员身份、余额等等
    getMyFullInfo() {
        return new Promise(async (resolve, reject) => {
            // console.log('这呢');
            let fullInfo = await request.post(api.myinfo, { uid: this.globalData.uid })
            fullInfo = fullInfo == null ? {} : fullInfo
            // console.log('fullInfo', fullInfo);
            if (fullInfo.hasOwnProperty('avatar')) {
                let vipflag = fullInfo.group_id >= 1 ? true : false
                // 存入本地缓存
                await wx.setStorageSync('fulluserInfo', fullInfo)
                await wx.setStorageSync('mobile', fullInfo.mobile)
                await wx.setStorageSync('isVip', vipflag)
                await wx.setStorageSync('VipGrade', fullInfo.group_id)

                console.log(wx.getStorageSync('fulluserInfo'));
                // 存入全局变量
                this.globalData.fulluserInfo = fullInfo
                this.globalData.mobile = fullInfo.mobile
                this.globalData.isVip = vipflag
                this.globalData.VipGrade = fullInfo.group_id
                // console.log(this.globalData.fulluserInfo);
                console.log('用户信息获取成功');
                resolve(true)
            } else {
                await wx.setStorageSync('fulluserInfo', { noinfo: true })
                this.globalData.fulluserInfo = { noinfo: true }
                console.log('失败了');
                resolve(false)
            }
        })
    },

    // 获取用户财务信息接口，当下主要是查询会员到期时间
    async getUserFinance() {
        if (!this.globalData.uid) return
        let Res = await request.post(api.get_user_finance, { uid: this.globalData.uid })
        console.log(Res);
    },

    // 全局变量
    globalData: {
        // 顶部导航栏计算高度
        paddingTop: 0,
        islogin: false,

        // 标记是否为朋友圈点击 有些API不可用，如login
        isFriendIn: false,

        // 存储 uid、openId、头像昵称等
        userInfo: null,
        // 存储所有信息，包括地址、手机号
        fulluserInfo: null,
        // 授权的手机号
        mobile: '',
        // 是否为会员
        isVip: false,
        // 会员等级
        VipGrade: 0,
        // 是否同意隐私协议
        isAgree: false,

        openId: '',
        uid: '',

        // 模板消息授权标识（只有当授权标识为真，
        // 并调用了wx.requestSubscribeMessage，返回结果res[tmpl_Id] === 'accept')才为真）
        // 分销审核标识
        checkflag1: false,

        // 自定义导航栏当前索引
        tabindex: 0,
        // 当前品牌id
        brandId: -1,

        // 购物车商品数量
        cartnum: 0,

        // 功能控制开关
        controlStatus: false
    }
})
